#include "userdialog.h"
#include "ui_userdialog.h"

// 构造函数
UserDialog::UserDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::UserDialog)
    , isEditMode(false)
    , currentUserId(-1)
{
    ui->setupUi(this);
    
    // 设置对话框属性
    setModal(true);
    setFixedSize(450, 520);
    
    // 连接信号槽
    connect(ui->saveBtn, &QPushButton::clicked, this, &UserDialog::onSaveClicked);
    connect(ui->cancelBtn, &QPushButton::clicked, this, &UserDialog::onCancelClicked);
    connect(ui->resetPasswordCheckBox, &QCheckBox::toggled, 
            this, &UserDialog::onResetPasswordToggled);
    
    // 初始状态：隐藏重置密码选项
    ui->resetPasswordCheckBox->setVisible(false);
    
    // 设置角色下拉框数据
    ui->roleComboBox->clear();
    ui->roleComboBox->addItem("普通用户", "user");
    ui->roleComboBox->addItem("管理员", "admin");
}

// 析构函数
UserDialog::~UserDialog()
{
    delete ui;
}

// 清空表单（用于添加模式）
void UserDialog::clearForm()
{
    setEditMode(false);
    currentUserId = -1;
    
    ui->usernameLineEdit->clear();
    ui->passwordLineEdit->clear();
    ui->roleComboBox->setCurrentIndex(0); // 默认普通用户
    ui->resetPasswordCheckBox->setChecked(false);
    
    ui->usernameLineEdit->setEnabled(true);
    ui->passwordLineEdit->setEnabled(true);
    ui->passwordLineEdit->setPlaceholderText("请输入密码");
    ui->titleLabel->setText("👤 添加用户");
}

// 设置用户信息（用于编辑模式）
void UserDialog::setUserInfo(const UserInfo& userInfo)
{
    setEditMode(true);
    currentUserId = userInfo.id;
    
    ui->usernameLineEdit->setText(userInfo.username);
    ui->passwordLineEdit->clear();
    
    // 设置角色下拉框
    if (userInfo.role == "admin") {
        ui->roleComboBox->setCurrentIndex(1);
    } else {
        ui->roleComboBox->setCurrentIndex(0);
    }
    
    // 编辑模式下用户名不可修改（防止主键冲突）
    ui->usernameLineEdit->setEnabled(false);
    ui->passwordLineEdit->setEnabled(false);
    ui->passwordLineEdit->setPlaceholderText("点击下方重置密码");
    ui->resetPasswordCheckBox->setChecked(false);
    ui->titleLabel->setText("👤 编辑用户");
}

// 保存按钮点击
void UserDialog::onSaveClicked()
{
    if (!validateInput()) {
        return;
    }
    
    if (saveUser()) {
        accept(); // 关闭对话框并返回Accepted
    }
}

// 取消按钮点击
void UserDialog::onCancelClicked()
{
    reject(); // 关闭对话框并返回Rejected
}

// 重置密码复选框状态变化
void UserDialog::onResetPasswordToggled(bool checked)
{
    ui->passwordLineEdit->setEnabled(checked);
    if (checked) {
        ui->passwordLineEdit->setPlaceholderText("请输入新密码");
        ui->passwordLineEdit->setFocus();
    } else {
        ui->passwordLineEdit->clear();
        ui->passwordLineEdit->setPlaceholderText("点击下方重置密码");
    }
}

// 验证输入数据
bool UserDialog::validateInput()
{
    QString username = ui->usernameLineEdit->text().trimmed();
    QString password = ui->passwordLineEdit->text();
    
    // 验证用户名
    if (username.isEmpty()) {
        showError("请输入用户名！");
        ui->usernameLineEdit->setFocus();
        return false;
    }
    
    if (username.length() < 3) {
        showError("用户名长度不能少于3个字符！");
        ui->usernameLineEdit->setFocus();
        return false;
    }
    
    // 添加模式或编辑模式下勾选了重置密码时，需要验证密码
    if (!isEditMode || ui->resetPasswordCheckBox->isChecked()) {
        if (password.isEmpty()) {
            showError("请输入密码！");
            ui->passwordLineEdit->setFocus();
            return false;
        }
        
        if (password.length() < 6) {
            showError("密码长度不能少于6个字符！");
            ui->passwordLineEdit->setFocus();
            return false;
        }
    }
    
    // 添加模式下检查用户名是否已存在
    if (!isEditMode) {
        if (DatabaseManager::getInstance().isUsernameExists(username)) {
            showError("该用户名已存在，请选择其他用户名！");
            ui->usernameLineEdit->setFocus();
            return false;
        }
    }
    
    return true;
}

// 保存用户数据
bool UserDialog::saveUser()
{
    QString username = ui->usernameLineEdit->text().trimmed();
    QString password = ui->passwordLineEdit->text();
    QString role = ui->roleComboBox->currentData().toString();
    
    bool success = false;
    
    if (isEditMode) {
        // 编辑模式
        if (ui->resetPasswordCheckBox->isChecked()) {
            // 需要更新密码
            success = DatabaseManager::getInstance().updateUser(currentUserId, username, password, role);
        } else {
            // 不更新密码，传入空字符串表示不修改密码
            success = DatabaseManager::getInstance().updateUser(currentUserId, username, "", role);
        }
    } else {
        // 添加模式
        success = DatabaseManager::getInstance().addUser(username, password, role);
    }
    
    if (!success) {
        showError("保存用户信息失败！");
        return false;
    }
    
    return true;
}

// 显示错误信息
void UserDialog::showError(const QString& message)
{
    QMessageBox::warning(this, "错误", message);
}

// 显示成功信息
void UserDialog::showSuccess(const QString& message)
{
    QMessageBox::information(this, "成功", message);
}

// 设置编辑模式
void UserDialog::setEditMode(bool isEdit)
{
    isEditMode = isEdit;
    ui->resetPasswordCheckBox->setVisible(isEdit);
}